package com.sh.data.engine.domain.normalization.standard.model.domain;

import com.alibaba.fastjson.JSON;
import com.sh.data.engine.domain.common.model.domain.KeyValueDomain;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.apache.commons.lang3.StringUtils;

import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;

/**
 * @author boyue.wjl
 */
@Data
@EqualsAndHashCode
public class DictionaryDomain {

    /**
     * 主键
     */
    private Long id;

    /**
     * 分组id
     */
    private Long groupId;

    /**
     * 字典名称（中文）
     */
    private String dictNameCn;

    /**
     * 字典名称（英文）
     */
    private String dictNameEn;

    /**
     * 字典分组id
     */
    private Long dictDirId;

    /**
     * 字典类型 0自建 1引用
     */
    private Integer dictType;

    /**
     * 业务定义（备注）
     */
    private String remark;

    /**
     * 发布状态 1已发布 0未发布
     */
    // @Column(name = "release_status")
    private Integer releaseStatus;

    /**
     * 引用字典id
     */
    private Long pid;

    /**
     * 归属部门id
     */
    private Long departmentId;

    /**
     * 数据类型
     */
    private String dictDataType;

    /**
     * 数据长度
     */
    private Integer dictDataLength;

    /**
     * 度量单位
     */
    private String dictDataUnit;

    /**
     * 允许为空 0-否 1-是
     */
    private Integer allowNull;

    /**
     * 允许重复 0-否 1-是
     */
    private Integer allowDuplicate;

    /**
     * 取值范围json
     */
    private String dictDataRangeJson;

    /**
     * 正则表达式
     */
    private String dictDataPattern;

    /**
     * 枚举值json
     */
    private String dictDataEnumValueJson;

    /**
     * 业务属性json
     */
    private String bizPropertiesJson;

    private Date createTime;

    private Integer rowState;

    private Date releaseTime;

    private List<String> enumKeys;

    public void dictDataEnumValueJsonToEnumKeys() {
        if (StringUtils.isBlank(this.dictDataEnumValueJson)) {
            return;
        }
        List<KeyValueDomain> domainList = JSON.parseArray(bizPropertiesJson, KeyValueDomain.class);
        this.enumKeys = domainList.stream().map(domain -> domain.getKey()).collect(Collectors.toList());
    }
}
